package com.example.springbootgraduation.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.springbootgraduation.entity.ChinaTotal;
import com.example.springbootgraduation.entity.LineTrend;
import com.example.springbootgraduation.entity.NocvData;
import com.example.springbootgraduation.entity.NocvNews;
import com.example.springbootgraduation.service.ChinaTotalService;
import com.example.springbootgraduation.service.IndexService;
import com.example.springbootgraduation.service.NocvNewsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

//index控制类
@Controller
public class IndexController {

    @Autowired
    private IndexService indexService;//将indexService注入进来

    @Autowired
    private ChinaTotalService chinaTotalService;

    @Autowired
    private NocvNewsService nocvNewsService;

    /**
     * 主控页面【嵌套china】
     * 查询chinaTotal数据 一条最新的数据
     * @return
     */
    @RequestMapping("/")
    public String index(Model model) throws ParseException {
       //1、找到ID最大的那一条数据
        Integer id = chinaTotalService.maxID();
        //2、根据ID进行查找数据
        ChinaTotal chinaTotal = chinaTotalService.getById(id);
        model.addAttribute("chinaTotal",chinaTotal);//将变量仍回前台

        return "index";
    }

    /**
     * 跳转中国地图
     */
    @RequestMapping("/toChina")
    public String toChina(Model model)throws ParseException{
        //1、找到ID最大的那一条数据
        Integer id = chinaTotalService.maxID();
        //2、根据ID进行查找数据
        ChinaTotal chinaTotal = chinaTotalService.getById(id);
        model.addAttribute("chinaTotal",chinaTotal);//将变量仍回前台
        //3、查询疫情播报新闻
        List<NocvNews> newslist = nocvNewsService.listNewsLimit5();
        model.addAttribute("newslist",newslist);
        return "china";
    }

    @RequestMapping("/query")
    @ResponseBody//json实体需要加ResponseBody，前台才能接收
    public List<NocvData> queryData() throws ParseException {//查询很多数据使用List
        //每天更新一次得数据使用场景
//        QueryWrapper<NocvData> queryWrapper = new QueryWrapper<>();
//        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
//        String format1 = format.format(new Date());
//        queryWrapper.ge("update_time",format.parse(format1));//大于等于当前时间
        List<NocvData> list = indexService.listOrderByIdLimit34();//拿到34数据
        return list;//返回数据
    }

    /**
     * 跳转pie页面
     */
    @RequestMapping("/toPie")
    public String toPie(){
        return "pie";//自动匹配pie页面
    }
    /**
     * 分组聚合
     * SQL:select count(*) from goods group by type;
     */
    //接收ajax地址
    @RequestMapping("/queryPie")
    @ResponseBody
    public List<NocvData> queryPieData(){//查询很多数据使用List
        List<NocvData> list = indexService.listOrderByIdLimit34();//拿到34数据
        return list;//返回数据
    }

    /**
     * 跳转柱状图页面
     */
    @RequestMapping("/toBar")
    public String toBar(){
        return "bar";//自动匹配bar页面
    }

    @RequestMapping("/queryBar")
    @ResponseBody
    public Map<String,List<Object>> queryBarData(){
        //1、所有城市数据:数值
        List<NocvData> list = indexService.listOrderByIdLimit34();//拿到34数据

        //2、所有城市数据
        //创建一个集合
        List<String> cityList = new ArrayList<>();
        //将拿到的数据循环出来
        for (NocvData data : list){
            //封装进去
            cityList.add(data.getName());//得到城市数据
        }
        //3、所有疫情的数值数据
        List<Integer> yiQingList = new ArrayList<>();
        for (NocvData data : list){
            //封装进去
            yiQingList.add(data.getValue());//得到疫情数据值
        }

        //4、创建Map
        Map map = new HashMap();
        map.put("cityList",cityList);
        map.put("yiQingList",yiQingList);
        return map;//返回数据
    }

    /**
     * 跳转折线趋势图页面
     */
    @RequestMapping("/toLine")
    public String toLine(){
        return "line";//自动匹配bar页面
    }

    /**
     * SELECT * FROM line_trend ORDER BY create_time LIMIT 7;
     */

    @RequestMapping("/queryLine")
    @ResponseBody
    public Map<String,List<Object>> queryLineData(){
        // 1、查询斤七天所有的数据
        List<LineTrend> listSeven = indexService.findSevenData();
        // 2、封装所有的确诊人数
        List<Integer> confirmList = new ArrayList<>();
        // 3、 封装所有的隔离人数
        List<Integer> isolationList = new ArrayList<>();
        // 4、 封装所有的治愈人数
        List<Integer> cureList = new ArrayList<>();
        // 5、 封装所有的死亡人数
        List<Integer> deadList = new ArrayList<>();
        // 6、 封装所有的疑似人数
        List<Integer> similarList = new ArrayList<>();
        // 7、使用for循环
        for (LineTrend data : listSeven){//装数据
            confirmList.add(data.getConfirm());//遍历出来
            isolationList.add(data.getIsolation());
            cureList.add(data.getCure());
            deadList.add(data.getDead());
            similarList.add(data.getSimilar());
        }
        // 8、返回数据的格式容器Map
        Map map = new HashMap();
        map.put("confirmList",confirmList);
        map.put("isolationList",isolationList);
        map.put("cureList",cureList);
        map.put("deadList",deadList);
        map.put("similarList",similarList);
        return map;
    }

}
